home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / dsp / dspgroup / macros.arc / SAT.ASM < prev    next >
Encoding:
Assembly Source File  |  1983-11-17  |  3.4 KB  |  43 lines

  1.  
  2. *                                                                               
  3. *SATURATE VALUE IN A BETWEEN VALUES B AND C                                     
  4. *A IS A VARIABLE                                                                
  5. *B AND C ARE VARIABLES OR CONSTANTS                                             
  6. *                                                                               
  7. SAT    $MACRO  A,B,C                                                            
  8.        $VAR L,L1,L2,L3                                                          
  9.        $ASG '$$LAB' TO L.S                                                      
  10.        $ASG L.SV+3 TO L.SV     GET A LABEL                                      
  11.        $ASG L.SV-2 TO L1.V                                                      
  12.        $ASG L.SV-1 TO L2.V                                                      
  13.        $ASG L.SV   TO L3.V                                                      
  14.        SOVM             SET OVERFLOW MODE                                       
  15.        $IF  C.SA&$UNDF                                                          
  16.        LCAC :C:         LOAD UPPER BOUND :C:                                    
  17.        $ELSE                                                                    
  18.        LAC  :C:,0       LOAD UPPER BOUND :C:                                    
  19.        $ENDIF                                                                   
  20.        SUB  :A:,0       COMPARE TO :A:                                          
  21.        BGEZ L$:L1.V:    BRANCH IF :A:<=:C:                                      
  22.        $IF  C.SA&$UNDF                                                          
  23.        LCAC :C:         RELOAD :C: AS VALUE                                     
  24.        $ELSE                                                                    
  25.        LAC  :C:,0       RELOAD :C: AS VALUE                                     
  26.        $ENDIF                                                                   
  27.        B    L$:L2.V:    BRANCH TO CONTINUE                                      
  28. L$:L1.V: EQU $          CHECK LOWER                                             
  29.        $IF  B.SA&$UNDF                                                          
  30.        LCAC :B:         LOAD LOWER BOUND :B:                                    
  31.        $ELSE                                                                    
  32.        LAC  :B:,0       LOAD LOWER BOUND :B:                                    
  33.        $ENDIF                                                                   
  34.        SUB  :A:,0       COMPARE TO :A:                                          
  35.        BLEZ L$:L3.V:    BRANCH IF :A:>:B:                                       
  36.        $IF  B.SA&$UNDF                                                          
  37.        LCAC :B:         RELOAD :B: AS VALUE                                     
  38.        $ELSE                                                                    
  39.        LAC  :B:,0       RELOAD :B: AS VALUE                                     
  40.        $ENDIF                                                                   
  41. L$:L2.V: SACL :A:,0     RESTORE :A:                                             
  42. L$:L3.V: ROVM           CONTINUE                                                
  43.        $END